package net.csdn.business.discuss.api.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import net.csdn.business.discuss.api.model.dto.*;
import net.csdn.business.discuss.api.model.entity.Discuss;
import net.csdn.business.discuss.api.model.query.DetailQuery;
import net.csdn.business.discuss.api.model.query.DisciussDetailQuery;
import net.csdn.business.discuss.api.model.query.DiscussConfigQuery;
import net.csdn.business.discuss.api.model.query.DiscussQuery;
import net.csdn.business.discuss.api.model.vo.DiscussVO;
import net.csdn.business.discuss.common.model.vo.UserInfoVO;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;


/**
 * @ClassName IDiscussService
 * @Description 讨论Service接口
 * @Author zhangyl
 * @Date 2023/7/18 11:22 
 */
public interface IDiscussService extends IService<Discuss>
{


    public Integer initDiscuss(InitDiscussDTO params);


    public Map<String,Boolean> isShowDiscuss(DiscussConfigQuery params);

    /**
     * 查询讨论总数
     *
     * @param sourceId 资源主体id
     * @param sourceType 资源主体类型：1：组织；2;仓库
     * @return 讨论
     */
    public Integer getTotal(String sourceId,Integer sourceType);

    /**
     * 讨论设置，打开或关闭
     *
     * @param params 更新开关信息
     * @return 讨论
     */
    public Integer discussSet(@RequestBody UpdateDiscussConfigDTO params);

    /**
     * 分页查询讨论
     *
     * @param query 讨论详细信息
     * @return 讨论
     */
    public Page<DiscussVO> findPageList(DiscussQuery query) throws Exception;

    /**
     * 根据id查询讨论详细信息
     * 
     * @param id 讨论主键
     * @return 讨论
     */
    public DiscussVO selectDiscussById(String id);

    /**
     * 根据id查询讨论详细信息
     *
     * @param query 讨论主键
     * @return 讨论
     */
    public DiscussVO selectDiscussDetail(DisciussDetailQuery query);

    /**
     * 查询讨论列表
     * 
     * @param query 讨论
     * @return 讨论集合
     */
    public List<DiscussVO> selectDiscussList(DiscussQuery query);


    /**
     * 投票
     *
     * @param params 讨论
     * @return 结果
     */
    public Integer vote(DiscussVoteDTO params);


    /**
     * discuss设置标签
     *
     * @param params 设置标签请求参数
     * @return 结果
     */
    public Integer addLabel(DiscussLabelDTO params);

    /**
     * 新增讨论
     * 
     * @param discuss 讨论
     * @return 结果
     */
    public Map<String,String> insertDiscuss(NewDiscussDTO discuss);


    /**
     * 修改讨论
     * 
     * @param discuss 讨论
     * @return 结果
     */
    public Integer updateDiscuss(UpdateDiscussDTO discuss);


    /**
     * 修改分类
     *
     * @param params 修改分类请求参数
     * @return 结果
     */
    public Integer changeCategory(ChangeCategoryDTO params);


    /**
     * 修改锁定状态
     *
     * @param params 修改锁定状态请求参数
     * @return 结果
     */
    public Integer changeLock(ChangeLockDTO params);


    /**
     * 修改置顶状态
     *
     * @param params 修改置顶状态请求参数
     * @return 结果
     */
    public Integer changePin(ChangePinDTO params);

    /**
     * 修改分类中的置顶状态
     *
     * @param params 修改分类中的置顶状态请求参数
     * @return 结果
     */
    public Integer changeCategoryPin(ChangePinDTO params);

    /**
     * 修改讨论状态，讨论打开或者关闭
     *
     * @param params 修改讨论状态状态请求参数
     * @return 结果
     */
    public Integer changeState(ChangeStateDTO params);


    /**
     * 修改分类中的置顶状态
     *
     * @param params 修改分类中的置顶状态请求参数
     * @return 结果
     */
    public Integer transfer(TransferDTO params);

    /**
     * 删除讨论信息
     * 
     * @param params 删除请求参数
     * @return 结果
     */
    public Integer deleteDiscussById(DeleteResourceDTO params);


    /**
     * 更新discuss评论数量
     *
     * @param discussId 主键
     * @return 结果
     */
    public Integer updateCommentTotal(String discussId, Integer sum);


    /**
     * 更新discuss回复数量
     *
     * @param discussId 主键
     * @return 结果
     */
    public Integer updateReplyTotal(String discussId, Integer sum);


    /**
     * 异步批量转移分类
     *
     * @param params 转移参数
     * @return 结果
     */
    public void transferCategory(TransferCategoryDTO params);


    public Set<UserInfoVO> relateUser(String id);

    public List<UserInfoVO> recentActivity(String id);

    public Integer like(DiscussLikeDTO params);

    public Integer unLike(DiscussLikeDTO params);

    public Integer updateAuditStatus(UpdateAuditStatusDTO params);



    /**
     * 分页查询我创建的讨论列表
     *
     * @param query 讨论详细信息
     * @return 讨论
     */
    public Page<DiscussVO> myDiscussPageList(DiscussQuery query) throws Exception;

    /**
     * 分页查询我参与的讨论列表
     *
     * @param query 讨论详细信息
     * @return 讨论
     */
    public Page<DiscussVO> joinDiscussPageList(DiscussQuery query) throws Exception;

    /**
     * 组织或仓库删除的时候，同步删除相关讨论和评论
     *
     * @param params 同步删除信息
     * @return 讨论
     */
    public void syncDelete(@RequestBody @Validated SyncDeleteDTO params) throws Exception;


    public DiscussVO selectBySourceIdAndNumber(String sourceId,Integer sourceType, Integer serialNumber);
}
